import { login, login_sso, logout, logout_sso, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import defAva from '@/assets/images/profile.jpg'
import Cookies from 'js-cookie'

const useUserStore = defineStore(
  'user',
  {
    state: () => ({
      token: getToken(),
      name: '',
      avatar: '',
      roles: [],
      permissions: []
    }),
    actions: {
      // 登录
      login(userInfo) {
        const username = userInfo.username.trim()
        const password = userInfo.password
        const code = userInfo.code
        const uuid = userInfo.uuid
        return new Promise((resolve, reject) => {
          login(username, password, code, uuid).then(res => {
            setToken(res.token)
            this.token = res.token
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },

      /** sso 单点登录 */
      login_sso(ticket) {
        return new Promise((resolve, reject) => {
          login_sso(ticket).then(res => {
            // removeToken()
            // Cookies.remove('ticket')
            // window.location.href = res.casCleanAddress // 先清空后台的缓存

            if(res.token !== 'exception'){
              setToken(res.token)
              Cookies.set('ticket', res.ticket) // 将 ticket 存入 cookie 中
              this.token = res.token
              resolve()
            } else {
              reject('非法用户')
            }
          }).catch(error => {
            reject(error)
          })
        })
      },
      // 获取用户信息
      getInfo() {
        return new Promise((resolve, reject) => {
          getInfo().then(res => {
            const user = res.user
            const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar

            if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
              this.roles = res.roles
              this.permissions = res.permissions
            } else {
              this.roles = ['ROLE_DEFAULT']
            }
            this.name = user.userName
            this.avatar = avatar
            resolve(res)
          }).catch(error => {
            reject(error)
          })
        })
      },
      // 退出系统
      logOut() {
        return new Promise((resolve, reject) => {
          logout(this.token).then(() => {
            logout_sso().then((res) => {
              this.token = ''
              this.roles = []
              this.permissions = []
              resolve()
              /** sso 单点登录退出 */
              if(Cookies.get('ticket')?.length){ // 如果 cookie 中存在ticket，则为sso单点登录方式
                removeToken()
                Cookies.remove('ticket')
                window.location.href = res.casCleanAddress // 先清空后台的缓存
                setTimeout(() => {
                  window.location.href = res.casAddress // 再跳转至登录页 （后端返回）
                }, 0)
              } else {
                /** 正常登录退出 */
                removeToken()
                Cookies.remove('ticket')
                location.href = '/index'
              }
            }).catch(error => {
              this.token = ''
              this.roles = []
              this.permissions = []
              removeToken()
              resolve()
              reject(error)
            }).finally(() => {
              // this.token = ''
              // this.roles = []
              // this.permissions = []
              // removeToken()
              // resolve()
            })

          }).catch(error => {
            reject(error)
          })
        })
      },

      logoutSso () {
        return new Promise((resolve, reject) => {
          logout_sso(this.token).then(() => {
            this.token = ''
            this.roles = []
            this.permissions = []
            removeToken()
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      }
    }
  })

export default useUserStore
